﻿# -*- coding: utf-8 -*-
#!/usr/bin/python

#-----------------------------------------------------------------------

## @package     camera
## \brief   	gestion de la caméra
## \author  	Eric Maisel
## \note    	édité par Pierrick Troadec et Kawtar Hssain et Yousra El Moussily
## \version     1.2
## \date        28/12/2011
## \copyright   license BSD

#------------------------------------------------------------------------

#    Importations
#  -----------------

import math
import physique
import prof

# Variables globales
#  -----------------

## Position initiale de la caméra
positionOeil = (0.0,1.6,1.0)
## Direction initiale pointée par la caméra
directionVisee = math.pi/2.0
## Hauteur de visée initiale de la caméra
hauteurVisee = 0.0

#   Fonctions
#  -----------------

## Convertit un angle en degré vers les radians
def deg2rad(d):
    return math.pi*d/180.0

## Parametre de la camera
##@return positionOeil : position du joueur
##@return pointVisee   : position pointée par la caméra
def parametresCamera():
    global hauteurVisee
    ex, ey,ez = positionOeil
    dx, dy, dz = math.cos(directionVisee), hauteurVisee, math.sin(directionVisee)
    
    pointVise = ex + dx, ey+dy, ez+dz

    return positionOeil, pointVise, (0.0,1.0,0.0)

## Rotate la camera d'un certain angle sur la déclinaison
##@param angleDegre :  angle selon lequel il faut rotater la caméra
def rotationCamera(angleDegre):
    global directionVisee
    angleRadian = deg2rad(angleDegre)
    directionVisee += angleRadian

## Rotate la camera d'un certain angle sur l' azimuth
##@param angleDegre :  angle selon lequel il faut rotater la caméra
def rotationCameraY(angleDegre):
    global hauteurVisee
    angleRadian = deg2rad(angleDegre)
    hauteurVisee+=angleRadian
    
## Déplace la camera dans la direction voulue
##@param deplacement  : direction voulue
##@param batiment     : liste des pièces du bâtiment
##@param aventurier   : le joueur
##@param listeCouloir : liste des couloirs du bâtiment
def deplacementCamera(deplacement, batiment, aventurier, listeCouloir):
    global positionOeil
    
    if aventurier["bloque"]:
        stop = 0
    else:
        stop = 1
    
    ex, ey, ez = positionOeil
    dx, dy, dz = math.cos(directionVisee), 0.0, math.sin(directionVisee)
    l = math.sqrt(dx*dx + dy*dy + dz*dz)
    d1x, d1y,d1z = dx/l, dy/l, dz/l
    auth = physique.testerDeplacement(ex, ez, d1x, d1z, deplacement, batiment, listeCouloir)*stop
    positionOeil = ex + deplacement*d1x*auth, ey + deplacement*d1y*auth, ez + deplacement*d1z*auth
    
